jQuery(document).ready(function($) { // Handle complex fields (name, address) character limits function enforceComplexFieldLimits() { // Handle name fields $('.ginput_container_name input[type="text"]').each(function() { var $input = $(this); var maxLength = 50; // Name fields max length applyLimit($input, maxLength); }); // Handle address fields $('.ginput_container_address input[type="text"]').each(function() { var $input = $(this); var maxLength = 100; // Default address field max length // Set specific limits based on the parent span class var $parentSpan = $input.closest('span'); if ($parentSpan.hasClass('address_city')) { maxLength = 50; } else if ($parentSpan.hasClass('address_state') || $parentSpan.hasClass('address_province')) { maxLength = 30; } else if ($parentSpan.hasClass('address_zip') || $parentSpan.hasClass('address_postal')) { maxLength = 15; // Covers US ZIP+4 and most international postal codes } applyLimit($input, maxLength); }); } // Helper function to apply limit and counter to an input function applyLimit($input, maxLength) { // Set maxlength attribute $input.attr('maxlength', maxLength); // Create counter if it doesn't exist var counterId = 'charleft_' + $input.attr('id'); if ($('#' + counterId).length === 0) { $input.after('
'); } // Initial counter update updateCounter($input, maxLength); // Update counter on input $input.on('input', function() { updateCounter($(this), maxLength); }); } // Helper function to update counter function updateCounter($input, maxLength) { var current = $input.val().length; var counterId = 'charleft_' + $input.attr('id'); $('#' + counterId).text(current + ' of ' + maxLength + ' max characters'); } // Run on page load enforceComplexFieldLimits(); // Run when a new form page is loaded (for multi-page forms) $(document).on('gform_page_loaded', function(event, form_id, current_page) { enforceComplexFieldLimits(); }); // Run when a form is rendered $(document).on('gform_post_render', function(event, form_id, current_page) { enforceComplexFieldLimits(); }); });